#include <iostream>
#include <string.h>
using namespace std;
//验证基类对象和派生类对象的转化问题
//首先：派生类对象可以赋值给基类对象，反之不行
//其次：基类对象的指针可以指向派生类对象，反之不行
//最后：基类对象的引用可以绑定派生类对象，反之不行

class A{
public:
    A(const char * pa)
    :_pa(new char[strlen(pa)+1])
    {
        strcpy(_pa,pa);
    }
    //拷贝构造函数
    A(const A & rhs)
    :_pa(new char[strlen(rhs._pa)+1])
    {
        strcpy(_pa,rhs._pa);
    }
    void show(){
        cout<<_pa<<endl;
    }
private:
    char * _pa;
};

class B:public A{
public:
    B(const char * pa)
    :A(pa)
    {
        
    }
private:
    A * a;
    B * b;
};
void test(){
    B b("hello");
    //派生类对象可以给基类赋值
    A a=b;
    a.show();
    b.show();
    //基类的指针可以指向派生类对象
    A* p=&b;
    p->show();
    //基类的引用可以绑定派生类对象
    A & v=b; 
    v.show();
}
int main(int argc, char * argv[]){
    test();
    return 0;
}

